/**
 * https://blog.csdn.net/yuanxu716/article/details/78290274  以前挂的那题
 * 题目大意
 *
 * 有n个房间，将i号房间里的人重新分配。分配规则：先让i号房间的人全部出来，接下来按照i+1，i+2，i+3, … 的顺序依次往这些房间里放一个人，n号房间的下一个房间是1号房间，直到所有人被重新分配。
 * 已知分配完后每个房间的人数以及最后一个人被分配的房间号k，求出分配前每个房间的人数，数据保证一定有解，若有多解输出任意一个解。
 * 输入描述
 *
 * 第一行两个整数n, k (2 <= n <= 10^5, 1 <= k <= n)，代表房间数量以及最后一个人被分配到的房间号。
 * 第二行n个整数ai (0 <= ai <= 10^9)，代表每个房间分配后的人数。
 * 样例输入
 *
 *     3 1
 *     6 5 1
 *
 * 样例输出
 *
 *     4 4 4
 *
 * 其实很简单，啥算法都没用膳个，纯数学。
 *
 * 集中情况处理下就可以： 先明确 1.数字最小的一定是被清空的房间
 * 然后，要判断 最后分配房间和这个被分配的房间 谁前谁后。 有集中情况，1.最后分配在前面，分配的在后面，就上面题的情况
 * 2.最后被分配的就是目前最小的。 这是最简单的。 被分配的人数就是 当前最小人数 * 房间数
 * 3.最后分配房间在后面，最小嘚在前面。 那人数就是
 *
 *
 */
public class SBTouTiao {
    public int[] findRoom(int n, int k, int[] room){
        int m_index = findMin(room), min = room[m_index];

        //确定分配了几轮
        int round = min;
        for(int i=0; i < n; i++){
            if(i == m_index){//最小房间在下面处理，循环里不处理
                continue;
            }
            if(k < m_index){//最后的在左边，并且只有一轮，说明就只分配了从最小 到 最后的过程
                if(i < k){
                    room[i] = room[i] - (round + 1);//多分配一次了
                }else{
                    room[i] = room[i] - round;
                }
            }else{
                if(i <= m_index && i >= k){
                    room[i] = room[i] - (round  + 1);//多分配一次了
                }else{
                    room[i] = room[i] - round ;
                }
            }
        }
        if(k<m_index){
            room[m_index] = (n-m_index - 1) + k + round * n;
        }else{
            room[m_index] = k-m_index + 1 + round * n;
        }

        return room;
    }

    int findMin(int[] room){
        int min=room[0], m_index=0;
        for(int i=1; i<room.length; i++){
            if(room[i] < min){
                min = room[i]; m_index = i;
            }
        }
        return m_index;
    }

    public static void main(String[] args){
        SBTouTiao s = new SBTouTiao();
        int[] r = new int[3];
        r[0] = 6;
        r[1] = 5;
        r[2] = 1;
        s.findRoom(3,1, r);
    }

}
